<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class C_Aluno extends MY_Controller {

	function __construct()
	{
		parent::__construct();
                $this->load->helper('html');
                $this->load->helper('url');
                
                
                
	}
        /**
         * Chamada para view principal
         */
	function index(){

            $security = explode(',', $this->session->userdata['acessoList']);
            
            if(in_array(Regra_Const::ConsultarAluno, $security)){
                
                $this->load->view('aluno/v_busca_aluno');
                
            } else {
                
                $this->load->view('menu/i_erro_acesso');
            }
            
	            
	}
        
        function addAluno(){
            
            $cidadeList = $this->em->createQuery('SELECT c FROM models\cidade c');
            
            $data['cidadeList'] = $cidadeList;
            
            $security = explode(',', $this->session->userdata['acessoList']);
            
            if(in_array(Regra_Const::CadastrarAluno, $security)){
                
                $this->load->view('aluno/v_novo_aluno',$data);
                
            } else {
                
                $this->load->view('menu/i_erro_acesso');
            }
            
            
        }
        /**
         *
         */
        function localizaAluno(){
            
            $security = explode(',', $this->session->userdata['acessoList']);
            
            if(in_array(Regra_Const::ConsultarAluno, $security)){
                
                $this->load->view('aluno/v_busca_aluno');
                
            } else {
                
                $this->load->view('menu/i_erro_acesso');
            }
            

        }

        /**
         * Método que retorna as informações referentes ao aluno
         * que serão exibidas na tab da view i_lista_aluno
         */
        function listarAluno(){

            extract($_POST);
            
            if(@$nome && !$alunoId){
                
                $nome = "'%". strtoupper($nome)."%'";
                $queryAluno = $this->em->createQuery('SELECT a FROM models\aluno a WHERE upper(a.nome) LIKE  '.$nome);
               
                foreach ($queryAluno->getResult() as $valueAluno) {
                    
                    $alunoId = $valueAluno->getAlunoId();

                }

            } else if(@$matricula && !$alunoId){
                
                $matricula = "'%". $matricula."%'";
                $queryAluno = $this->em->createQuery('SELECT a FROM models\aluno a WHERE a.matricula LIKE  '.$matricula);
               
                foreach ($queryAluno->getResult() as $valueAluno) {
                    
                    $alunoId = $valueAluno->getAlunoId();

                }
                
            }

            /**
             * Baseado nos parametros recebidos através da requisição ajax
             * é realizada a recuperação do objeto
             */
            $aluno = $this->em->find('models\aluno',$alunoId);
           

            /**
             * array para recuperar o valor de um determinado índice
             * @todo Checar se a utilização de um Enum torna o código mais legível e
             * sem perdas na execução
             */
            $sexo           = array(0 => 'Não Informado',1=>'Feminino',2=>'Masculino');
            $estadoCivil    = array(0 => 'Não Informado',1=>'Solteiro',2=>'Casado',3=>'Viúvo',4=>'Desquitado',5=>'Separado(a) Judicialmente');
            $origemEtnica   = array(0 => 'Não Informado',1=>'Negra',2=>'Branca',3=>'Parda',4=>'Ind&iacute;gena',5=>'Oriental',6=>'Outra');
            $respDireto     = array(0 => 'Não',1=>'Sim');
            $tipoEndereco   = array(0 => 'Não Informado',1=>'Residencial',2=>'Comercial');
            $ingresso       = array(0 => 'Não Informado',1=>'Vestibular',2=>'Transfer&ecirc;ncia',3=>'Aluno Graduado');
            /**
             * Recupera o objeto endereço para o aluno em questão
             */
            $endereco = $this->em->find('models\endereco',$aluno->getEnderecoCod());

            /**
             * Recupera o objeto telefone para o aluno em questão
             */
            $queryFone = $this->em->createQuery('SELECT t FROM models\telefone t WHERE t.alunoId = ?1');
            $queryFone->setParameter(1, $alunoId);
            
            foreach ($queryFone->getResult() as $telefone) {
                
                if($telefone->getTelefoneTipo() == 1){

                    $data['foneFixo'] = $telefone->getTelefoneNumero();

                } else {

                    $data['foneCelular'] = $telefone->getTelefoneNumero();

                }
                
            }
            /**Passa objeto responsavel para a view*/
            $queryResp = $this->em->createQuery('SELECT r FROM models\responsavel r WHERE r.ativo = 1 AND r.alunoId = ?1');
            $queryResp->setParameter(1,$alunoId);
            
            /**Passa o objeto cidade para a view*/
            $cidadeList = $this->em->createQuery('SELECT c FROM models\cidade c');
            $data['cidadeList'] = $cidadeList;
            
            /**Passa o objeto uf para a view*/
            $ufList = $this->em->createQuery('SELECT u FROM models\uf u');
            $data['ufList'] = $ufList;
            
            /**Passa o objeto documetacao para a view*/
            //'SELECT a FROM CmsArticle a JOIN a.user u
            $documetacaoList = $this->em->createQuery('SELECT d FROM models\documentacao d  WHERE d.alunoId = ?1');
            $documetacaoList->setParameter(1,$alunoId);
            
            /**
             * Recupera o objeto cidade e uf da naturalidade do aluno
             */
            $cidadeNatural = $this->em->find('models\cidade',$aluno->getCidadeNascimento());
            $ufNatural = $this->em->find('models\uf',$cidadeNatural->getUf());
            
            /**
             * Formatação de datas para exibição no formato utilizado no Brasil
             */
            if($aluno->getDataNascimento()){
                
                $dtNasc = explode('-',$aluno->getDataNascimento());
                $dtNasc = $dtNasc[2].'/'.$dtNasc[1].'/'.$dtNasc[0];
            }
            if($aluno->getDataMatricula()){
                
                $dtMatricula = explode('-',$aluno->getDataMatricula());
                $dtMatricula = $dtMatricula[2].'/'.$dtMatricula[1].'/'.$dtMatricula[0];
                
            }
            if($aluno->getDataColacaoGrau()){
                
                $dtColacao = explode('-',$aluno->getDataColacaoGrau());
                $dtColacao = $dtColacao[2].'/'.$dtColacao[1].'/'.$dtColacao[0];
            }
            if($aluno->getDataTransferencia()){
                
                $dtTransf = explode('-',$aluno->getDataTransferencia());
                $dtTransf = $dtTransf[2].'/'.$dtTransf[1].'/'.$dtTransf[0];
                
            }
            if($aluno->getDataEntradaPais()){
                
                $dtEntradaPais = explode('-',$aluno->getDataEntradaPais());
                $dtEntradaPais = $dtEntradaPais[2].'/'.$dtEntradaPais[1].'/'.$dtEntradaPais[0];
                
            }
            if($aluno->getDataConclusaoEm()){
                
                $dtConclusaoEm = explode('-',$aluno->getDataConclusaoEm());
                $dtConclusaoEm = $dtConclusaoEm[2].'/'.$dtConclusaoEm[1].'/'.$dtConclusaoEm[0];
                
            }
            if($aluno->getDataExpDiploma()){
                
                $dtExpDiploma = explode('-',$aluno->getDataExpDiploma());
                $dtExpDiploma = $dtExpDiploma[2].'/'.$dtExpDiploma[1].'/'.$dtExpDiploma[0];
            }
            
            $irmaoList = $this->em->createQuery('SELECT i FROM models\irmao i  WHERE i.alunoId = ?1');
            $irmaoList->setParameter(1,$alunoId); 
            
            //Documentacao pendente
            $listaDocObrigatorio = $this->em->createQuery('SELECT t FROM models\tipo_documento t WHERE t.obrigatoriedade = 1');
            foreach($listaDocObrigatorio->getResult() as $docObrigatorio){
                $listaObrigatorio .= $docObrigatorio->getTipoDocCodigo().',';
            }
            $listaObrigatorio = substr($listaObrigatorio, 0, -1);
            $arrayDocObrigatorio = explode(',',$listaObrigatorio);
            sort($arrayDocObrigatorio);
            
            $listaDocCadastrados = $this->em->createQuery('SELECT d FROM models\documentacao d WHERE d.alunoId = ?1');
            $listaDocCadastrados->setParameter(1,$alunoId); 
            foreach($listaDocCadastrados->getResult() as $docCadastrado){
                $listaCadastrados .= $docCadastrado->getTipoDocCod().',';
            }
            $listaCadastrados = substr($listaCadastrados, 0, -1);

            $arrayDocCadastrado = explode(',',$listaCadastrados);
            sort($arrayDocCadastrado);
            
            
            $diff = array_diff($arrayDocObrigatorio, $arrayDocCadastrado);

             
            /**
             * Passagem dos atributos dos objetos relacionados para a view.
             * Optar sempre por esta construção para evitar codificação
             * na camada de visão
             */
            $data['nome']               = $aluno->getNome();
            $data['alunoId']            = $alunoId;
            $data['matricula']          = $aluno->getMatricula();
            $data['cpf']                = $aluno->getCpf();
            $data['email']              = $aluno->getEmail();
            $data['tituloEleitor']      = $aluno->getTituloEleitor();
            $data['estadoCivil']        = $estadoCivil[$aluno->getEstadoCivil()];
            $data['estadoCivilCod']     = $aluno->getEstadoCivil();
            $data['identidade']         = $aluno->getIdentidade();
            $data['nacionalidade']      = $aluno->getNacionalidade();
            $data['sexo']               = $sexo[$aluno->getSexo()];
            $data['sexoCod']            = $aluno->getSexo();
            $data['dataNascimento']     = $dtNasc;
            $data['dataMatricula']      = $dtMatricula;
            $data['dataColacao']        = @$dtColacao;
            $data['dataTransferencia']  = @$dtTransf;
            $data['diaPagamento']       = $aluno->getDiaPagamento();
            $data['localConclusaoEm']   = $aluno->getLocalConclusaoEm();
            $data['dataConclusaoEm']    = @$dtConclusaoEm;
            $data['dataExpDiploma']     = @$dtExpDiploma;
            $data['dataEntradaPais']    = @$dtEntradaPais;
            $data['cidadeNaturalCod']   = $aluno->getCidadeNascimento();
            $data['naturalidade']       = $cidadeNatural->getCidadeDesc().'/'.$ufNatural->getUfSigla();
            $data['necessidadeEspecial']= $aluno->getNecessidadeEspecial();
            $data['logradouro']         = utf8_encode($endereco->getLogradouro());
            $data['bairro']             = utf8_encode($endereco->getBairro());
            $data['cep']                = $endereco->getCep();
            $data['complemento']        = utf8_encode($endereco->getComplemento());
            $data['cidade']             = utf8_encode($endereco->getCidade());
            $data['uf']                 = $endereco->getUf();
            if($endereco->getTipoEndereco())
                $data['tipoEndereco']       = $tipoEndereco[$endereco->getTipoEndereco()];
            $data['tipoEnderecoCod']    = $endereco->getTipoEndereco();
            $data['observacao']         = utf8_encode($aluno->getObservacao());
            $data['ingressoCod']        = $aluno->getIngresso();
            $data['nis']                = $aluno->getNis();
            $data['status']             = $aluno->getStatus();
            $data['origemEtnicaCod']    = $aluno->getOrigemEtnica();
            if($aluno->getOrigemEtnica())
                $data['origemEtnica']       = $origemEtnica[$aluno->getOrigemEtnica()];
            $data['ingresso']           = $ingresso[$aluno->getIngresso()];
            $data['responsavelList']    = $queryResp;
            $data['documetacaoList']    = $documetacaoList;
            $data['parentescoList']     = $this->em->createQuery('SELECT p FROM models\parentesco p ORDER BY p.parentescoDescricao ASC');
            $data['irmaoList']          = $irmaoList;
            $data['diff']               = @$diff;
            $data['serieList']          = $this->em->createQuery('SELECT s FROM models\serie s');
           

            $this->load->view('aluno/i_lista_aluno',$data);

        }
        
        function listarAlunoDataTable(){
            
            extract($_POST);
            
            if(@$nome && !$matricula){
                
                $nome = "'%". strtoupper($nome)."%'";
                $queryAluno = $this->em->createQuery('SELECT a FROM models\aluno a WHERE a.status = 1 AND upper(a.nome) LIKE  '.$nome);
  

            } else if(@$matricula){
                
                $matricula = "'%". $matricula."%'";
                $queryAluno = $this->em->createQuery('SELECT a FROM models\aluno a WHERE a.status = 1 AND a.matricula LIKE  '.$matricula);
                
            }
            $data['queryComplete'] = $queryAluno;

            $this->load->view('aluno/inc/i_lista',$data);
             
        }
        
        function atualizarDadosAdic(){
            
            $security = explode(',', $this->session->userdata['acessoList']);
            
            
                
                extract($_POST);

                 /****Conversao de datas no padrão do MySQL***/
                if(@$dtEntradaPais){
                    $dtEntradaPais = explode('/', $dtEntradaPais);
                    $dateE =  strtotime($dtEntradaPais[2].'-'.$dtEntradaPais[1].'-'.$dtEntradaPais[0]);
                    $nDataEntradaPais = date('Y-m-d', $dateE);
                }

                $aluno = $this->em->find('models\aluno',$alunoId);
                
                
                //Abertura da transação
                $this->em->getConnection()->beginTransaction();
                 try {
                     
                     
                    //Atribuindo valores ao aluno
                    $aluno->setNecessidadeEspecial(@$necEspecial);
                    $aluno->setOrigemEtnica(@$origemEtnica);
                    $aluno->setNis(@$nis);
                    $aluno->setDataEntradaPais(@$nDataEntradaPais);



                    //Prepara a gravação do aluno
                    $this->em->merge($aluno);
                    $this->em->flush ();

                    //Telefones do aluno
    //                if($telefone){
    //
    //                    $telefoneFixo = new models\telefone;
    //                    $telefoneFixo->setTelefoneNumero($telefone);
    //                    $telefoneFixo->setMatriculaCod($aluno->getMatricula());
    //
    //                    $this->em->merge($telefoneFixo);
    //                    $this->em->flush ();
    //                }
    //                
    //                if($celular){
    //
    //                    $telefoneCelular = new models\telefone;
    //                    $telefoneCelular->setTelefoneNumero($celular);
    //                    $telefoneCelular->setMatriculaCod($aluno->getMatricula());
    //
    //                    $this->em->merge($telefoneCelular);
    //                    $this->em->flush ();
    //                
    //                }

                    //Se não houver nenhuma exceção, é confirmada a gravação do objeto
                    if(in_array(Regra_Const::AtualizarAluno, $security)){
                        $this->em->getConnection()->commit();
                        
                        $this->m_log->buildLog('O aluno '.$aluno->getNome().' teve seus dados adicionais atualizados por: '.$this->session->userdata['usuario'],  Acao_Const::ATUALIZAR_ALUNO,$alunoId);
                         echo 1;
                         
                     } else {
                         
                         echo 888;
//                        $this->load->view('menu/i_erro_acesso');
                    }

                 } catch ( Exception $e ) {
                     //Rollback na gravação e lançamento de exceção
                     $this->em->getConnection()->rollback();
                     $this->em->close();
                     throw $e ;

                     echo 999;
                }

            
            
        }
        
        function voltarResponsavel(){
            
            extract($_POST);
            
            /**Passa objeto responsavel para a view*/
            $queryResp = $this->em->createQuery('SELECT r FROM models\responsavel r WHERE r.ativo = 1 AND r.alunoId = ?1');
            $queryResp->setParameter(1,$alunoId);
            
            $data['alunoId']    = $alunoId;
            $data['responsavelList']  = $queryResp;
            
            $this->load->view('aluno/inc/i_dados_responsavel',$data);
            
        }
        
        function atualizarAluno(){
            
            $security = explode(',', $this->session->userdata['acessoList']);
            
            extract($_POST);

//            telefone
//            celular
            
             /****Conversao de datas no padrão do MySQL***/
            if($dataMatricula){
                $dtMatricula = explode('/', $dataMatricula);
                $dateM =  strtotime($dtMatricula[2].'-'.$dtMatricula[1].'-'.$dtMatricula[0]);
                $nDataMatricula = date('Y-m-d', $dateM);
            }
            if($dataNascimento){
                
                $dtNascimento = explode('/',$dataNascimento);
                $dateN =  strtotime($dtNascimento[2].'-'.$dtNascimento[1].'-'.$dtNascimento[0]);
                $nDataNascimento = date('Y-m-d', $dateN);
            }
            
            
            if($dataConclusao){
                $dtConclusao = explode('/',$dataConclusao);
                $dateC =  strtotime($dtConclusao[2].'-'.$dtConclusao[1].'-'.$dtConclusao[0]);
                $nDataConclusao = date('Y-m-d', $dateC);        
            }
            
            if($dataTransferencia){
                $dtTransf = explode('/',$dataTransferencia);
                $dateT =  strtotime($dtTransf[2].'-'.$dtTransf[1].'-'.$dtTransf[0]);
                $nDataTransferencia = date('Y-m-d', $dateT);    
            }
            
            $aluno = $this->em->find('models\aluno',$alunoId);
            $endereco = $this->em->find('models\endereco',$aluno->getEnderecoCod());
            
            //Abertura da transação
            $this->em->getConnection()->beginTransaction();
             try {
                 if(in_array(Regra_Const::AtualizarAluno, $security)){
                      
                    //Atribuindo valores ao endereco
                    $endereco->setBairro(utf8_decode($bairro));//
                    $endereco->setCep($cep);//
                    $endereco->setCidade(utf8_decode($cidade));//
                    $endereco->setComplemento(utf8_decode($complemento));//
                    $endereco->setLogradouro(utf8_decode($logradouro));//
                    $endereco->setTipoEndereco($tipoEndereco);
                    $endereco->setUf($uf);//
                    //Prepara a gravação do endereço
                    $this->em->merge($endereco);
                    $this->em->flush ();


                     //Atribuindo valores ao aluno
                    $aluno->setCidadeNascimento($naturalCidade);
                    $aluno->setEmail($email);//
                    $aluno->setDataMatricula($nDataMatricula);//
                    $aluno->setDataNascimento($nDataNascimento);//
                    $aluno->setDataConclusaoEm(@$nDataConclusao);//
                    $aluno->setDataTransferencia(@$nDataTransferencia);
                    $aluno->setDiaPagamento($diaPagamento);
                    $aluno->setNacionalidade(utf8_decode($nacionalidade));//
                    $aluno->setEstadoCivil($estadoCivil);//
                    $aluno->setNome(utf8_decode($nome));//
                    $aluno->setObservacao(utf8_decode($observacao));
                    $aluno->setSexo($sexo);//
                    $aluno->setIngresso($ingresso);//


                    //Prepara a gravação do aluno
                    $this->em->merge($aluno);
                    $this->em->flush ();

                    //Telefones do aluno
    //                if($telefone){
    //
    //                    $telefoneFixo = new models\telefone;
    //                    $telefoneFixo->setTelefoneNumero($telefone);
    //                    $telefoneFixo->setMatriculaCod($aluno->getMatricula());
    //
    //                    $this->em->merge($telefoneFixo);
    //                    $this->em->flush ();
    //                }
    //                
    //                if($celular){
    //
    //                    $telefoneCelular = new models\telefone;
    //                    $telefoneCelular->setTelefoneNumero($celular);
    //                    $telefoneCelular->setMatriculaCod($aluno->getMatricula());
    //
    //                    $this->em->merge($telefoneCelular);
    //                    $this->em->flush ();
    //                
    //                }

                    //Se não houver nenhuma exceção, é confirmada a gravação do objeto
                    $this->em->getConnection()->commit();

                     echo 1;
                 
                } else {
                         
                     echo 888;

                } 

             } catch ( Exception $e ) {
                 //Rollback na gravação e lançamento de exceção
                 $this->em->getConnection()->rollback();
                 $this->em->close();
                 throw $e ;
                 
                 echo 999;
            }
            

        }
        /**
         * Sequencia de chamadas das telas de cadastro do aluno
         */
        function cadastrarAluno(){

            $this->load->view('aluno/v_novo_aluno');

        }
        
        
        function buscaComumAluno(){
            
            if(isset($_POST['queryString'])) {
         
                
                if(strlen($_POST['queryString']) > 0){
                    $matricula = "'%". strtoupper($_POST['queryString'])."%'";
                    $queryComplete = $this->em->createQuery('SELECT a FROM models\aluno a WHERE a.status = 1 AND a.matricula LIKE '.@$matricula);
                    
                    $data['queryComplete'] = $queryComplete;
//                    foreach ($queryComplete->getResult() as $aluno) {
//
//                        echo '<li onClick="fill(\''.$aluno->getMatricula().'\');">'.utf8_encode($aluno->getNome()).'</li>';
//
//                    }
                    $this->load->view('aluno/inc/i_lista',$data);
                }
                
            }
        }
        
        function buscaAutoComplete(){
            
            if(isset($_POST['queryString'])) {
         
                
                if(strlen($_POST['queryString']) > 0){
                    $matricula = "'%". strtoupper($_POST['queryString'])."%'";
                    $queryComplete = $this->em->createQuery('SELECT a FROM models\aluno a WHERE a.status = 1 AND a.matricula LIKE '.@$matricula);
                    
                    $data['queryComplete'] = $queryComplete;
//                    foreach ($queryComplete->getResult() as $aluno) {
//
//                        echo '<li onClick="fill(\''.$aluno->getMatricula().'\');">'.utf8_encode($aluno->getNome()).'</li>';
//
//                    }
                    $this->load->view('aluno/inc/i_lista',$data);
                }
                
            }
        }

        function cadastrarAlunoPasso1(){

            $cidadeList = $this->em->createQuery('SELECT c FROM models\cidade c');
            
            $data['cidadeList'] = $cidadeList;
            
            $this->load->view('aluno/v_novo_aluno_passo1',$data);

        }

        function cadastrarAlunoPasso2(){

            $this->load->view('aluno/v_novo_aluno_passo2');

        }

        function cadastrarAlunoPasso3(){

            $this->load->view('aluno/v_novo_aluno_passo3');

        }

        function cadastrarAlunoPasso4(){

            $this->load->view('aluno/v_novo_aluno_passo4');

        }

        function cadastrarAlunoPasso5(){

            $this->load->view('aluno/v_novo_aluno_passo5');

        }

        function cadastrarAlunoPasso6(){

            $this->load->view('aluno/v_novo_aluno_passo6');

        }
        /**
         * Retorna para view o resultado do metodo getEnderecoPorCep()
         * da classe m_tools
         */
        function buscaEndereco(){

            $this->load->model('m_tools');
            
            extract($_POST);
            /*
             * Atribui o retorno do método getEnderecoPorCep()
             * à variável $endereco
             */
            $endereco = $this->m_tools->getEnderecoPorCep($cep);
            
            switch($endereco['resultado']){
                //Para locais onde o CEP é completo, com bairro, logradouro
                case '1':
                    $toReturn =  $endereco['resultado'].'@'.utf8_encode($endereco['logradouro']).'@'.utf8_encode($endereco['bairro']).'@'. utf8_encode($endereco['cidade']).'@'.$endereco['uf'];
                   
                    break;
                //Para locais onde o CEP é genérico
                case '2':
                    $toReturn =  $endereco['resultado'].'@'.utf8_encode($endereco['cidade']).'@'.$endereco['uf'];
                    
                    break;
            }
            //echo utf8_encode($endereco['cidade'])  ;die();
            echo $toReturn;
        }
        /**
         * Método que efetua o cadastro
         */
        function executaCadastro(){

           extract($_POST);
           
           /**
             * array para recuperar o valor de um determinado índice
             * @todo Checar se a utilização de um Enum torna o código mais legível e
             * sem perdas na execução
             */
            $sexo           = array(0 => 'Não Informado',1=>'Feminino',2=>'Masculino');
            $estadoCiv      = array(0 => 'Não Informado',1=>'Solteiro',2=>'Casado',3=>'Viúvo',4=>'Desquitado',5=>'Separado(a) Judicialmente');
            $origemEtnica   = array(0 => 'Não Informado',1=>'Negra',2=>'Branca',3=>'Parda',4=>'Ind&iacute;gena',5=>'Oriental',6=>'Outra');
            $respDireto     = array(0 => 'Não',1=>'Sim');
            $tpEndereco     = array(0 => 'Não Informado',1=>'Residencial',2=>'Comercial');
            $ingresso       = array(0 => 'Não Informado',1=>'Vestibular',2=>'Transfer&ecirc;ncia',3=>'Aluno Graduado');
                     
           $nDataTransferencia = null;
           $nDataConclusao = null;
           
           $cidadeList = $this->em->createQuery('SELECT c FROM models\cidade c');
            
           $_POST['cidadeList'] = $cidadeList;
           
           /****Conversao de datas no padrão do MySQL***/
            $dtMatricula = explode('/', $dataMatricula);
            $dateM =  strtotime($dtMatricula[2].'-'.$dtMatricula[1].'-'.$dtMatricula[0]);
            $nDataMatricula = date('Y-m-d', $dateM);
            
            $dtNascimento = explode('/',$dataNascimento);
            $dateN =  strtotime($dtNascimento[2].'-'.$dtNascimento[1].'-'.$dtNascimento[0]);
            $nDataNascimento = date('Y-m-d', $dateN);
            
            if($dataConclusao){
                $dtConclusao = explode('/',$dataConclusao);
                $dateC =  strtotime($dtConclusao[2].'-'.$dtConclusao[1].'-'.$dtConclusao[0]);
                $nDataConclusao = date('Y-m-d', $dateC);        
            }
            
            if($dataTransferencia){
                $dtTransf = explode('/',$dataTransferencia);
                $dateT =  strtotime($dtTransf[2].'-'.$dtTransf[1].'-'.$dtTransf[0]);
                $nDataTransferencia = date('Y-m-d', $dateT);    
            }

            $matriculaTmp = rand(1,999);
            $matricula = str_pad($matriculaTmp, 6, "0", STR_PAD_LEFT);
//           echo date("Y-m-d",$dataMatricula);
//           //Abertura da transação
            $this->em->getConnection()->beginTransaction();
             try {

                //Criando instancias dos objetos Aluno e Endereco
                $aluno = new models\aluno;
                $endereco = new models\endereco;
                //Atribuindo valores ao endereco
                $endereco->setBairro(utf8_decode($bairro));
                $endereco->setCep($cep);
                $endereco->setCidade(utf8_decode($cidade));
                $endereco->setComplemento(utf8_decode($complemento));
                $endereco->setLogradouro(utf8_decode($logradouro));
                $endereco->setTipoEndereco($tipoEndereco);
                $endereco->setUf($uf);
                //Prepara a gravação do endereço
                $this->em->persist($endereco);
                $this->em->flush ();
                 //Atribuindo valores ao aluno
                $aluno->setCidadeNascimento($naturalCidade);
                $aluno->setEmail($email);
                $aluno->setDataMatricula($nDataMatricula);
                $aluno->setDataNascimento($nDataNascimento);
                $aluno->setDataConclusaoEm($nDataConclusao);
                $aluno->setDataTransferencia($nDataTransferencia);
                $aluno->setDiaPagamento($diaPagamento);
                $aluno->setNacionalidade(utf8_decode($nacionalidade));
                $aluno->setEstadoCivil($estadoCivil);
                $aluno->setNome(utf8_decode($nome));
                $aluno->setObservacao(utf8_decode($observacao));
                $aluno->setSexo($sexo);
                $aluno->setMatricula($matricula);
                $aluno->setIngresso($ingresso);
                $aluno->setStatus(1);
                $aluno->setEnderecoCod($endereco->getEnderecoCod());
               
                
                //gravação do aluno
                $this->em->persist($aluno);
                $this->em->flush ();
                //Telefones do aluno
                if($telefone){

                    $telefoneFixo = new models\telefone;
                    $telefoneFixo->setTelefoneNumero($telefone);
                    $telefoneFixo->setAlunoId($aluno->getAlunoId());
                    $telefoneFixo->setTelefoneTipo(1);

                    $this->em->persist($telefoneFixo);
                    $this->em->flush ();
                }
                
                if($celular){

                    $telefoneCelular = new models\telefone;
                    $telefoneCelular->setTelefoneNumero($celular);
                    $telefoneCelular->setAlunoId($aluno->getAlunoId());
                    $telefoneCelular->setTelefoneTipo(2);

                    $this->em->persist($telefoneCelular);
                    $this->em->flush ();
                
                }
                
                //Se não houver nenhuma exceção, é confirmada a gravação do objeto
                $this->em->getConnection()->commit();
                
                /**
                 * Recupera o objeto cidade e uf da naturalidade do aluno
                 */
                $cidadeNatural = $this->em->find('models\cidade',$aluno->getCidadeNascimento());
                $ufNatural = $this->em->find('models\uf',$cidadeNatural->getUf());
                
                /**Passa objeto responsavel para a view*/
                $queryResp = $this->em->createQuery('SELECT r FROM models\responsavel r WHERE r.ativo = 1 AND r.alunoId = ?1');
                $queryResp->setParameter(1,$aluno->getAlunoId());

                /**Passa o objeto cidade para a view*/
                $cidadeList = $this->em->createQuery('SELECT c FROM models\cidade c');
                $_POST['cidadeList'] = $cidadeList;

                /**Passa o objeto uf para a view*/
                $ufList = $this->em->createQuery('SELECT u FROM models\uf u');
                $_POST['ufList'] = $ufList;

                /**Passa o objeto documetacao para a view*/
                //'SELECT a FROM CmsArticle a JOIN a.user u
                $documetacaoList = $this->em->createQuery('SELECT d FROM models\documentacao d  WHERE d.alunoId = ?1');
                $documetacaoList->setParameter(1,$aluno->getAlunoId());
                
                $irmaoList = $this->em->createQuery('SELECT i FROM models\irmao i  WHERE i.alunoId = ?1');
                $irmaoList->setParameter(1,$aluno->getAlunoId()); 
                
                /**
                 * Passagem dos atributos dos objetos relacionados para a view.
                 * Optar sempre por esta construção para evitar codificação
                 * na camada de visão
                 */
                $_POST['nome']               = $aluno->getNome();
                $_POST['alunoId']            = $aluno->getAlunoId();
                $_POST['matricula']          = $aluno->getMatricula();
                $_POST['cpf']                = null;
                $_POST['email']              = $aluno->getEmail();
                $_POST['tituloEleitor']      = null;
                $_POST['estadoCivil']        = $estadoCiv[$aluno->getEstadoCivil()];//
                $_POST['estadoCivilCod']     = $aluno->getEstadoCivil();
                $_POST['identidade']         = null;
                $_POST['nacionalidade']      = $aluno->getNacionalidade();
                $_POST['sexo']               = $sexo[$aluno->getSexo()];//
                $_POST['sexoCod']            = $aluno->getSexo();
                $_POST['dataNascimento']     = $dataNascimento;
                $_POST['dataMatricula']      = $dataMatricula;
                $_POST['dataColacao']        = @$dataConclusao;
                $_POST['dataTransferencia']  = $dataTransferencia;
                $_POST['diaPagamento']       = $aluno->getDiaPagamento();
                $_POST['localConclusaoEm']   = $aluno->getLocalConclusaoEm();
                $_POST['dataConclusaoEm']    = null;
                $_POST['dataExpDiploma']     = null;
                $_POST['dataEntradaPais']    = null;
                $_POST['cidadeNaturalCod']   = $aluno->getCidadeNascimento();
                $_POST['naturalidade']       = $cidadeNatural->getCidadeDesc().'/'.$ufNatural->getUfSigla();
                $_POST['necessidadeEspecial']= $aluno->getNecessidadeEspecial();
                $_POST['foneFixo']           = $telefone;
                $_POST['foneCelular']        = $celular;
                $_POST['logradouro']         = $logradouro;
                $_POST['bairro']             = $bairro;
                $_POST['cep']                = $cep;
                $_POST['complemento']        = $complemento;
                $_POST['cidade']             = $cidade;
                $_POST['uf']                 = $uf;
                if($tipoEndereco)
                    $_POST['tipoEndereco']       = $tpEndereco[(int)$tipoEndereco];
                $_POST['tipoEnderecoCod']    = $tipoEndereco;
                $_POST['observacao']         = utf8_encode($aluno->getObservacao());
                $_POST['ingressoCod']        = $aluno->getIngresso();
                $_POST['ingresso']           = $ingresso[(int)$aluno->getIngresso()];
                $_POST['nis']                = null;
                $_POST['origemEtnicaCod']    = $aluno->getOrigemEtnica();
//                if($aluno->getOrigemEtnica())
//                    $_POST['origemEtnica']       = $origemEtnica[(int)$aluno->getOrigemEtnica()];
//                $_POST['ingresso']           = $ingresso[(int)$aluno->getIngresso()];
                $_POST['responsavelList']    = $queryResp;
                $_POST['documetacaoList']    = $documetacaoList;
                $_POST['parentescoList']     = $this->em->createQuery('SELECT p FROM models\parentesco p ORDER BY p.parentescoDescricao ASC');
                $_POST['irmaoList']          = $irmaoList;
                $_POST['serieList']          = $this->em->createQuery('SELECT s FROM models\serie s');
                
                
                $this->load->view('aluno/i_lista_aluno',$_POST);

             } catch ( Exception $e ) {
                 //Rollback na gravação e lançamento de exceção
                 $this->em->getConnection()->rollback();
                 $this->em->close();
                 throw $e ;
                 
                 echo 999;
            }
  
    
           
           
        }
        
        function addIrmao(){
            
            $security = explode(',', $this->session->userdata['acessoList']);
            
            if(in_array(Regra_Const::AtualizarAluno, $security)){
                
                $this->load->view('aluno/p_cadastro_irmao',$_POST);
                
            } else {
                
                $this->load->view('menu/i_erro_acesso');
            }
            
        }
        
        function buscaIrmao(){

            if($_POST['matriculaIrmao']) {
         
                
                if(strlen($_POST['matriculaIrmao']) > 0){
                    $matriculaIrmao = "'%". strtoupper($_POST['matriculaIrmao'])."%'";
                    $queryComplete = $this->em->createQuery('SELECT a FROM models\aluno a WHERE a.status=1 AND a.matricula LIKE '.$matriculaIrmao);
                    
                    
                }
                
            }else if(!$_POST['matriculaIrmao'] && $_POST['nomeIrmao']) {
         
                
                if(strlen($_POST['nomeIrmao']) > 0){
                    $nomeIrmao = "'%". strtoupper($_POST['nomeIrmao'])."%'";
                    $queryComplete = $this->em->createQuery('SELECT a FROM models\aluno a WHERE a.status=1 AND a.nome LIKE '.$nomeIrmao);
                    
                    
                }
                
            }
            
            $data['queryComplete'] = $queryComplete;
            $data['alunoId']       = $_POST['alunoId'];
           
            $this->load->view('aluno/inc/i_lista_irmao',$data);
            
        }
        
        function buscaIrmaoAutoComplete(){
            
            if(isset($_POST['matriculaIrmao'])) {
         
                
                if(strlen($_POST['matriculaIrmao']) > 0){
                    $matriculaIrmao = "'%". strtoupper($_POST['queryString'])."%'";
                    $queryComplete = $this->em->createQuery('SELECT a FROM models\aluno a WHERE a.status=1 AND a.matricula LIKE '.$matriculaIrmao);
                    
                    
                }
                
            }else if(isset($_POST['nomeIrmao'])) {
         
                
                if(strlen($_POST['nomeIrmao']) > 0){
                    $nomeIrmao = "'%". strtoupper($_POST['nomeIrmao'])."%'";
                    $queryComplete = $this->em->createQuery('SELECT a FROM models\aluno a WHERE a.status=1 AND a.nome LIKE '.$nomeIrmao);
                    
                    
                }
                
            }
            
            $data['queryComplete'] = $queryComplete;
           
            $this->load->view('aluno/inc/i_lista_irmao',$data);
        }
        
        function gravarIrmao(){
            
            extract($_POST);
            
            $security = explode(',', $this->session->userdata['acessoList']);
            
             //Abertura da transação
            $this->em->getConnection()->beginTransaction();
             try {
                 
                
                
                if(in_array(Regra_Const::AtualizarAluno, $security)){
                    $irmao1 = new models\irmao;
                    $irmao2 = new models\irmao;

                    $irmao1->setAlunoId($alunoId);
                    $irmao1->setIrmaoId($irmaoId);

                    //gravação da classe irmao
                    $this->em->persist($irmao1);
                    $this->em->flush ();

                    $irmao2->setAlunoId($irmaoId);
                    $irmao2->setIrmaoId($alunoId);

                    //gravação da classe irmao
                    $this->em->persist($irmao2);
                    $this->em->flush ();

                    //Se não houver nenhuma exceção, é confirmada a gravação do objeto
                    $this->em->getConnection()->commit();

                    $dadosIrmao = $this->em->find('models\aluno',$irmao1->getIrmaoId());

                    $trRetorno = '<tr id="tr_irmao_'.$irmao1->getIrmaoCod().'">
                                    <td><div align="center">'.$dadosIrmao->getMatricula().'</div></td>
                                    <td><div>'.utf8_encode($dadosIrmao->getNome()).'</div></td>
                                    <td><a href="#" onclick="removeIrmao('. @$irmao1->getIrmaoCod().')">
                                            <img id="excIrmao" src="http://localhost/aurora/assets/images/excluir.png" />
                                        </a>
                                    </td>    
                                  </tr>';

                    echo TRUE.'@'.$trRetorno;
                } else {
                
                    echo 888;
                }

            } catch ( Exception $e ) {
                 //Rollback na gravação e lançamento de exceção
                 $this->em->getConnection()->rollback();
                 $this->em->close();
                 throw $e ;
                 
                 echo 999;
            }
        }
        //Funcao não utilizada
        function removeIrmao(){
            
            $security = explode(',', $this->session->userdata['acessoList']);
            
            extract($_POST);
            
            $irmao = $this->em->find('models\Irmao',$irmaoCod);

//            $irmao = $this->em->getRepository('models\Irmao')->findOneBy(array('irmaoId' => 45));

//            Abertura da transação
            $this->em->getConnection()->beginTransaction();
             try {
                if(in_array(Regra_Const::AtualizarAluno, $security)){               
                    $this->em->remove($irmao);

                    $this->em->flush();

                    //Se não houver nenhuma exceção, é confirmada a gravação do objeto
                    $this->em->getConnection()->commit();

                    echo TRUE;
             
             } else {
                
                $this->load->view('menu/i_erro_acesso');
            }   

            } catch ( Exception $e ) {
                 //Rollback na gravação e lançamento de exceção
                 $this->em->getConnection()->rollback();
                 $this->em->close();
                 throw $e ;
                 
                 echo 999;
            }
            
        }
        
        function loadAno(){
            
            extract($_POST);
            
            $anoSerieList =  $this->em->createQuery('SELECT t FROM models\turma t WHERE t.serieCod = ?1');
            $anoSerieList->setParameter(1,$serieCod);
            
            $data['anoSerieList'] = $anoSerieList;
            
            $this->load->view('turma/inc/cbo_ano_letivo',$data);
            
        }
        
        function loadTurno(){
            
            extract($_POST);
            
            $turnoList =  $this->em->createQuery('SELECT t FROM models\turma t WHERE t.serieCod = ?1 AND t.anoLetivo = ?2');
            $turnoList->setParameter(1,$serieCod);
            $turnoList->setParameter(2,$anoLetivo);
            
            $data['turnoList'] = $turnoList;
            
            $this->load->view('turma/inc/cbo_turno',$data);
            
        }
        
        function loadTurma(){
            
            extract($_POST);
            $turmaList =  $this->em->createQuery('SELECT t FROM models\turma t WHERE t.serieCod = ?1 AND t.anoLetivo = ?2 AND t.turnoCod = ?3');
            $turmaList->setParameter(1,$serieCod);
            $turmaList->setParameter(2,$anoLetivo);
            $turmaList->setParameter(3,$turnoCod);
            
            $data['turmaList'] = $turmaList;
            
            $this->load->view('turma/inc/cbo_turma',$data);
        }
        
        function gravarDadosAcademicos(){
            
            extract($_POST);
            $security = explode(',', $this->session->userdata['acessoList']);
            
            if(in_array(Regra_Const::Atualizar, $security)){
                $turmaList =  $this->em->createQuery('SELECT t FROM models\turma t WHERE t.serieCod = ?1 AND t.anoLetivo = ?2 AND t.turnoCod = ?3 AND t.turmaCod = ?4');
                $turmaList->setParameter(1,$serieCod);
                $turmaList->setParameter(2,$anoLetivo);
                $turmaList->setParameter(3,$turnoCod);
                $turmaList->setParameter(4,$turmaCod);

                foreach ($turmaList->getResult() as $turma) {

                    $turmaId = $turma->getTurmaId();
                }

                $academico = new models\Academico;

                $academico->setAlunoId($alunoId);
                $academico->setTurmaId($turmaId);

                $this->em->persist($academico);

                $this->em->flush();

                echo TRUE;
              
            } else {
                
                echo 888;
            }   
                    
            
        }
}